/**
  ******************************************************************************
  * @文件名           : dri_flash_sst.c
  * @作者             : citunhk
  * @功能介绍         : Flash驱动
  *	@日期             : 2022.11.1
  ******************************************************************************
  * @注意
  *
  *
  *
  ******************************************************************************
  *更改记录
  *日期 修改人 修改内容
  *
  *
  *
  ******************************************************************************
  */
#include "dri_flash_sst.h"
#include "bsp_SPI.h"
#include "sys_data.h"
#include "fml_pid.h"
#include "dri_AnalogQuantity.h"

/**
* @函数名	Flash_ReadStatusRegister
* @功能	    Flash读取状态寄存器
		    可在任何时间读取状态寄存器，甚至是在写（编程/擦除）操作期间。
			当进行写操作时，应在发送任何新命令前检查BUSY位，以确保新命令会被器件正确接收
* @入口参数	无
* @返回值	状态寄存器的值
*/
static uint8_t Flash_ReadStatusRegister(void)
{
	uint8_t statusReg;
	BSP_Flash_CS_RESET();									/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(READ_STAUS_REG);		/* 然后读取状态寄存器指令 */
	statusReg = BSP_Flash_ReceiveByte();
	BSP_Flash_CS_SET();										/* 最后拉高CS引脚 */
	return statusReg;
}

/**
* @函数名	Flash_WaitBusy
* @功能	    Flash 状态寄存器忙等待
			若状态寄存器第一位为1，则为忙碌，一直等待，知道不忙结束函数
* @入口参数	无
* @返回值	无
*/
static void Flash_WaitBusy(void)
{
	uint8_t i;
	do
	{
		i = Flash_ReadStatusRegister();		/* 读取状态寄存器 */
	}
	while(i & 0x01);		/* 判断第一位是否为1，若为1，循环；反之退出 */
}

/**
* @函数名	Flash_WriteEnable
* @功能	    Flash 写使能
			写使能指令可将状态寄存器中的写使能锁存器位设置为“1”，以允许进行写操作。
			在执行任何写（编程/擦除）操作之前，都必须先执行写使能指令。
			写是能指令也可用于允许执行写状态寄存器指令
* @入口参数	无
* @返回值	无
*/
static void Flash_WriteEnable(void)
{
	BSP_Flash_CS_RESET();					/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(WRITE_ENABLE);		/* 然后发送写使能指令 */
	BSP_Flash_CS_SET();						/* 最后拉高CS引脚 */
}

/**
* @函数名	Flash_WriteDisenable
* @功能	    Flash 写失能
			写失能指令将写使能锁存器位和AAI位复位为0，以禁止任何新的写操作发生。
			写失能指令不会终止任何正在进行的编程操作。
			执行写失能指令之后，所有正在进行的编程操作都可以持续到TBP。
* @入口参数	无
* @返回值	无
*/
static void Flash_WriteDisenable(void)
{
	BSP_Flash_CS_RESET();									/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(WRITE_DISENABLE);	/* 然后发送失使能指令 */
	BSP_Flash_CS_SET();										/* 最后拉高CS引脚 */
}

/**
* @函数名	Flash_WriteStatusRegister
* @功能	    改写状态寄存器，向状态寄存器写入数据Byte
* @入口参数	bute:新寄存器的值
* @返回值	无
*/
void Flash_WriteStatusRegister(uint8_t byte)
{
	BSP_Flash_CS_RESET();								/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(EN_WRITE_SR);		/* 发送允许改写状态寄存器命令 */
	BSP_Flash_CS_SET();									/* 最后拉高CS引脚 */

	BSP_Flash_CS_RESET();								/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(WRITE_SR);				/* 发送改写状态寄存器命令 */
	BSP_Flash_SendByte(byte);						/* 向状态寄存器写入数据Byte */
	BSP_Flash_CS_SET();									/* 最后拉高CS引脚 */
}

/**
* @函数名	Flash_ReadJedecID
* @功能	    Flash 读取JEDEC ID
* @入口参数	无
* @返回值	JEDECID
*/
uint32_t Flash_ReadJedecID(void)
{
	uint32_t JEDECID = 0;
	BSP_Flash_CS_RESET();								/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(READ_JEDEC_ID);					/* 发送读取JEDEC ID命令 */
	JEDECID = (JEDECID | BSP_Flash_ReceiveByte()) << 8;
	JEDECID = (JEDECID | BSP_Flash_ReceiveByte()) << 8;
	JEDECID = (JEDECID | BSP_Flash_ReceiveByte());
	BSP_Flash_CS_SET();									/* 最后拉高CS引脚 */
	return JEDECID;										/* 返回JEDEC ID */
}

/**
* @函数名	Flash_ReadManuID_DeviceID
* @功能	    Flash 读取ManufacturerID和DeviceID
* @入口参数	无
* @返回值	manuID_deviceID
*/
uint16_t Flash_ReadManuID_DeviceID(uint8_t readManuDeviceIDAddr)
{
	uint8_t manuID,deviceID;
	uint16_t manuID_deviceID;

	BSP_Flash_CS_RESET();										/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(READ_DEVICE_ID);			/* 然后发送读ID指令 */
	BSP_Flash_SendByte(0x00);
	BSP_Flash_SendByte(0x00);
	BSP_Flash_SendByte(readManuDeviceIDAddr);
	if(readManuDeviceIDAddr==1)					/* 先输出DeviceID */
	{
		deviceID = BSP_Flash_ReceiveByte();		/* 接收DeviceID */
		manuID = BSP_Flash_ReceiveByte();		/* 接收ManufacturerID */
	}
	else																/* 先输出ManufacturerID */
	{
		manuID = BSP_Flash_ReceiveByte();		/* 接收ManufacturerID */
		deviceID = BSP_Flash_ReceiveByte();		/* 接收DeviceID */
	}
	BSP_Flash_CS_SET();											/* 最后拉高CS引脚 */

	/* 保存为16位的数据，高字节为ManufacturerID，低字节为DeviceID */
	manuID_deviceID = ((uint16_t)manuID) << 8 | deviceID;
		return manuID_deviceID;
}

/**
	* 函 数 名： Flash_EBSY
	* 功能说明： 允许AAI模式期间，SO脚输出忙状态
	* 入口参数： 无
	* 返 回 值： 无
	*/
//static void Flash_EBSY(void)
//{
//	BSP_Flash_CS_RESET();				/* 首先拉低CS引脚 */
//	BSP_Flash_SendByte(EBSY);			/* 发送允许AAI模式期间，SO脚输出忙状态命令 */
//	BSP_Flash_CS_SET();					/* 最后拉高CS引脚 */
//}

/**
* @函数名	Flash_DBSY
* @功能	    禁止AAI模式期间，SO脚输出忙状态
* @入口参数	无
* @返回值	无
*/
static void Flash_DBSY(void)
{
	BSP_Flash_CS_RESET();				/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(DBSY);			/* 发送禁止AAI模式期间，SO脚输出忙状态命令 */
	BSP_Flash_CS_SET();					/* 最后拉高CS引脚 */
}

/**
* @函数名	DRI_Flash_Init
* @功能	    Flash芯片初始化
* @入口参数	无
* @返回值	无
*/
void DRI_Flash_Init(void)
{
	BSP_Flash_CS_SET();						/* 片选CS#管脚置高--不选中芯片 */
	Flash_WriteStatusRegister(0x02);		/* 给状态寄存器写入数据02(不明白) */
	Flash_DBSY();							/* 禁止AAI模式时，SO脚输出忙状态 */

	DRI_Flash_ReadBuffer(&FP.flashBuff[0], ADDR_SYSTEAM_PARA, 500);//读取系统参数到buff中
	DRI_Flash_ReadBuffer(&UP.flashBuff[0], ADDR_USER_PARA, 500);//读取用户参数到buff中
	DRI_Flash_ReadBuffer(&sav.flashBuff[0], ADDR_SAVE, 100);//读取保存参数到buff中
	DRI_Flash_ReadBuffer(&PID.Box[0], ADDR_PID_PARA, 1000);//读取PID参数到buff中

	if(sav.Para.Run_Num != 7)//判断flash是否第一次使用
	{
		sav.Para.Run_Num = 7;  //3  V2.01-V2.02
							   //4  V2.03-V2.04
							   //5  V2.10
								//6	V2.11
    	SYS_FP_Restoru();  //系统参数恢复出厂
    	SYS_UP_Restoru();  //用户参数恢复出厂
    	FML_PID_Restoru();  //PID参数恢复出厂
//    	DRI_Save_Restoru(); //校准初值恢复出厂

    	sav.Para.pptAD1[8] = 769;  //4mA
    	DRI_Flash_Erase_4KByte(ADDR_SAVE);//写入前擦除
    	DRI_Flash_AAI_WriteBuffer(&sav.flashBuff[0], ADDR_SAVE, 100);//写入校准参数初值到buff中

		DRI_Flash_Erase_4KByte(ADDR_SYSTEAM_PARA);//写入前擦除
		DRI_Flash_AAI_WriteBuffer(&FP.flashBuff[0], ADDR_SYSTEAM_PARA, 500);//写入系统参数初值到buff中

		DRI_Flash_Erase_4KByte(ADDR_USER_PARA);//写入前擦除
		DRI_Flash_AAI_WriteBuffer(&UP.flashBuff[0], ADDR_USER_PARA, 500);//写入用户初值到buff中

		DRI_Flash_Erase_4KByte(ADDR_PID_PARA);//写入前擦除
		DRI_Flash_AAI_WriteBuffer(PID.Box, ADDR_PID_PARA, sizeof(PID.Box));//写入用户初值到buff中

		DRI_Flash_Erase_4KByte(ADDR_SAVE);//写入前擦除
		DRI_Flash_AAI_WriteBuffer(&sav.flashBuff[0], ADDR_SAVE, 100);//写入校准初值到buff中

	}
}

/**
* @函数名	DRI_Flash_ReadByte
* @功能	    从ReadAddr地址读取一个字节数据
* @入口参数	读取数据的地址
* @返回值	读取的一个字节数据
*/
uint8_t DRI_Flash_ReadByte(uint32_t readAddr)
{
	uint8_t temp = 0;
	BSP_Flash_CS_RESET();																/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(READ_DATA);											/* 发送读取数据命令 */
	BSP_Flash_SendByte((readAddr & 0xFF0000) >> 16);		/* 发送24位的读取数据地址 */
	BSP_Flash_SendByte((readAddr& 0xFF00) >> 8);
	BSP_Flash_SendByte(readAddr & 0xFF);
	temp = BSP_Flash_ReceiveByte();												/* 接收读取到的数据 */
	BSP_Flash_CS_SET();																	/* 最后拉高CS引脚 */
	return temp;																		/* 返回读取到的数据 */
}

/**
* @函数名	DRI_Flash_ReadBuffer
* @功能	    从readAddr地址开始读取numByteToRead个字节数据
* @入口参数	pBuffer：缓存区指针 readAddr：读取数据的地址 numByteToRead:读取数据的数量
* @返回值	无
*/
void DRI_Flash_ReadBuffer(uint8_t* pBuffer, uint32_t readAddr, uint16_t numByteToRead)
{
	BSP_Flash_CS_RESET();																/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(READ_DATA);											/* 发送读取数据命令 */
	BSP_Flash_SendByte((readAddr & 0xFF0000) >> 16);		/* 发送24位的读取数据地址 */
	BSP_Flash_SendByte((readAddr& 0xFF00) >> 8);
	BSP_Flash_SendByte(readAddr & 0xFF);
	while(numByteToRead--)													/* 判断是否完成读取numByteToRead个字节数据 */
	{
		*pBuffer = BSP_Flash_ReceiveByte();								/* 接受读取到的数据，并存储于pBuffer中 */
		pBuffer++;																		/* pBuffer指针自增1 */
	}
	BSP_Flash_CS_SET();																	/* 最后拉高CS引脚 */
}

/**
* @函数名	DRI_Flash_HighSpeedReadByte
* @功能	    从readAddr高速读取一个字节数据
* @入口参数	读取数据的地址
* @返回值	读取的一个字节数据
*/
uint8_t DRI_Flash_HighSpeedReadByte(uint32_t readAddr)
{
	uint32_t temp = 0;
	BSP_Flash_CS_RESET();																/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(HIGH_SPEED_READ_DATA);						/* 发送快速读取数据命令 */
	BSP_Flash_SendByte((readAddr & 0xFF0000) >> 16);		/* 发送24位的读取数据地址 */
	BSP_Flash_SendByte((readAddr& 0xFF00) >> 8);
	BSP_Flash_SendByte(readAddr & 0xFF);
	BSP_Flash_SendByte(0x00);														/* 发送虚拟字节数据 */
	temp = BSP_Flash_ReceiveByte();											//接收读取到的数据
	BSP_Flash_CS_SET();																	/* 最后拉高CS引脚 */
	return temp;																		/* 返回读取到的数据 */
}

/**
* @函数名	DRI_Flash_HighSpeedReadBuffer
* @功能	    从readAddr地址开始高速读取numByteToRead个字节数据,并存储于pBuffer中
* @入口参数	pBuffer：缓存区指针 readAddr：读取数据的地址 numByteToRead:读取数据的数量
* @返回值	无
*/
void DRI_Flash_HighSpeedReadBuffer(uint8_t* pBuffer, uint32_t readAddr, uint16_t numByteToRead)
{
	BSP_Flash_CS_RESET();																/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(HIGH_SPEED_READ_DATA);						/* 发送快速读取数据命令 */
	BSP_Flash_SendByte((readAddr & 0xFF0000) >> 16);		/* 发送24位的读取数据地址 */
	BSP_Flash_SendByte((readAddr& 0xFF00) >> 8);
	BSP_Flash_SendByte(readAddr & 0xFF);
	BSP_Flash_SendByte(0x00);														/* 发送虚拟字节数据 */
	while(numByteToRead--)													/* 判断是否完成读取numByteToRead个字节数据 */
	{
		*pBuffer = BSP_Flash_ReceiveByte();								/* 接受读取到的数据，并存储于pBuffer中 */
		pBuffer++;																		/* pBuffer指针自增1 */
	}
	BSP_Flash_CS_SET();																	/* 最后拉高CS引脚 */
}

/**
* @函数名	Flash_WriteByte
* @功能	    从writeAddr地址写入一个字节数据byte
* @入口参数	byte：要写入的数据 writeAddr：写入数据的地址
* @返回值	无
*/
void Flash_WriteByte(uint8_t byte, uint32_t writeAddr)
{
	/* 先进行写使能 */
	Flash_WriteEnable();
	/* 然后写数据 */
	BSP_Flash_CS_RESET();																/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(BYTE_PROGRAM);										/* 发送写数据命令 */
	BSP_Flash_SendByte((writeAddr & 0xFF0000) >> 16);		/*发送24位的写入数据地址 */
	BSP_Flash_SendByte((writeAddr & 0xFF00) >> 8);
	BSP_Flash_SendByte(writeAddr & 0xFF);
	BSP_Flash_SendByte(byte);														/* 发送要写入的数据 */
	BSP_Flash_CS_SET();																	/* 最后拉高CS引脚 */
	/* 最后等待写完成 */
	Flash_WaitBusy();																/* 等待写操作完成 */
}

/**
* @函数名	DRI_Flash_WriteBuffer
* @功能	    将pBuffer中的bufferLength个字节数据写入到以writeAddr为起始地址的区域
* @入口参数	pBuffer：缓存区指针 writeAddr：写入数据的地址 bufferLength:写入数据的数量
* @返回值	无
*/
void DRI_Flash_WriteBuffer(uint8_t *pBuffer, uint32_t writeAddr, uint16_t bufferLength)
{
	while(bufferLength--)											/* 判断是否完成写入NumByteToRead个字节数据 */
	{
		Flash_WriteByte(*pBuffer,writeAddr);		/* 把当前pBuffer对应的数据，写入当前writeAddr中 */
		pBuffer++;															/* 数据指针自增1 */
		writeAddr++;														/* 写入地址自增1 */
	}
}

/**
* @函数名	DRI_Flash_WriteBytes
* @功能	    以writeAddr为起始地址，写入byteLength个数据byte(写入的是同一个数据byte)
* @入口参数	byte：要写入的数据 writeAddr：写入数据的地址 byteLength:写入数据的数量
* @返回值	无
*/
void DRI_Flash_WriteBytes(uint8_t byte, uint32_t writeAddr, uint32_t byteLength)
{
    while(byteLength--)										/* 判断是否完成写入byteLength个字节数据 */
  {
    Flash_WriteByte(byte,writeAddr);			/* 向writeAddr中写入数据字节Byte */
    writeAddr++;													/* 写入地址自增1 */
  }
}

/**
* @函数名	DRI_Flash_AAI_WriteBytes
* @功能	    以Addr为起始地址，用AAI模式，写入ByteLength个数据Byte(写入的是同一个数据Byte)ByteLength必须为偶数
* @入口参数	byte：要写入的数据 addr：写入数据的地址 byteLength:写入数据的数量
* @返回值	无
*/
void DRI_Flash_AAI_WriteBytes(uint8_t byte, uint32_t addr, uint32_t byteLength)
{
  uint32_t length = 0;
  length = (byteLength/2)-1;									/* AAI模式每次写入两字节数据，因此byteLength各字节，分成Length次写入 */
	/* 先进行写使能 */
	Flash_WriteEnable();
	/* 然后写数据 */
	BSP_Flash_CS_RESET();														/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(AAI_WORD_PROGRAM);						/* 发送AAI模式写入命令 */
	BSP_Flash_SendByte((addr & 0xFF0000) >> 16);		/* 发送24位的写入数据地址 */
	BSP_Flash_SendByte((addr & 0xFF00) >> 8);
	BSP_Flash_SendByte(addr & 0xFF);
	BSP_Flash_SendByte(byte);												/* 写入第一个字节数据 */
	BSP_Flash_SendByte(byte);												/* 写入第二个字节数据 */
	BSP_Flash_CS_SET();															/* 最后拉高CS引脚 */
	/* 最后等待写完成 */
	Flash_WaitBusy();														/* 等待写操作完成 */

	while(length--)															/* 判断是否完成Length次写入 */
	{
		BSP_Flash_CS_RESET();													/* 首先拉低CS引脚 */
		BSP_Flash_SendByte(AAI_WORD_PROGRAM);					/* 发送AAI模式写入命令 */
		BSP_Flash_SendByte(byte);											/* 写入第一个字节数据 */
		BSP_Flash_SendByte(byte);											/* 写入第二个字节数据 */
		BSP_Flash_CS_SET();														/* 最后拉高CS引脚 */
		/* 最后等待写完成 */
		Flash_WaitBusy();													/* 等待写操作完成 */
	}
	Flash_WriteDisenable();											/* 写入完成，退出AAI模式 */
}

/**
* @函数名	DRI_Flash_AAI_WriteBuffer
* @功能	    用AAI模式将pBuffer中的bufferLength个字节数据写入到以addr为起始地址的区域，byteLength必须为偶数
* @入口参数	pBuffer：缓存区指针 addr：写入数据的地址 byteLength:写入数据的数量，必须为偶数
* @返回值	无
*/
void DRI_Flash_AAI_WriteBuffer(uint8_t *pBuffer,uint32_t addr,uint16_t bufferLength)
{
  uint16_t length = 0;
  length = (bufferLength/2)-1;								/* AAI模式每次写入两字节数据，因此byteLength各字节，分成Length次写入 */
	/* 先进行写使能 */
	Flash_WriteEnable();
	/* 然后写数据 */
	BSP_Flash_CS_RESET();														/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(AAI_WORD_PROGRAM);						/* 发送AAI模式写入命令 */
	BSP_Flash_SendByte((addr & 0xFF0000) >> 16);		/* 发送24位的写入数据地址 */
	BSP_Flash_SendByte((addr & 0xFF00) >> 8);
	BSP_Flash_SendByte(addr & 0xFF);

	BSP_Flash_SendByte(*pBuffer);										/* 写入第一个字节数据 */
	pBuffer++;																	/* 数据指针加1 */
	BSP_Flash_SendByte(*pBuffer);										/* 写入第二个字节数据 */
	pBuffer++;																	/* 数据指针加1 */

	BSP_Flash_CS_SET();															/* 最后拉高CS引脚 */
	/* 最后等待写完成 */
	Flash_WaitBusy();														/* 等待写操作完成 */

	while(length--)															/* 判断是否完成Length次写入 */
	{
		BSP_Flash_CS_RESET();													/* 首先拉低CS引脚 */
		BSP_Flash_SendByte(AAI_WORD_PROGRAM);					/* 发送AAI模式写入命令 */
		BSP_Flash_SendByte(*pBuffer);									/* 写入数据 */
		pBuffer++;																/* 数据指针加1 */
		BSP_Flash_SendByte(*pBuffer);									/* 写入数据 */
		pBuffer++;																/* 数据指针加1 */
		BSP_Flash_CS_SET();														/* 最后拉高CS引脚 */
		/* 最后等待写完成 */
		Flash_WaitBusy();													/* 等待写操作完成 */
	}
	Flash_WriteDisenable();											/* 写入完成，退出AAI模式 */
}

/**
* @函数名	DRI_Flash_Erase_4KByte
* @功能	    擦除4KB数据空间
* @入口参数	addr:擦除起始地址
* @返回值	无
*/
void DRI_Flash_Erase_4KByte(uint32_t addr)
{
 	Flash_WriteEnable();												/* 先进行写使能 */

	BSP_Flash_CS_RESET();														/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(SECTOR_ERACE_4KB);						/* 发送擦除4KB数据空间命令 */
	BSP_Flash_SendByte((addr & 0xFF0000) >> 16);		   /* 发送24位的擦除起始地址 */
	BSP_Flash_SendByte((addr & 0xFF00) >> 8);
	BSP_Flash_SendByte(addr & 0xFF);
	BSP_Flash_CS_SET();															/* 最后拉高CS引脚 */

	Flash_WaitBusy();														/* 等待写操作完成 */
}
#if 0/*未使用，裁剪*/
/**
* @函数名	DRI_Flash_Erase_32KByte
* @功能	    擦除32KB数据空间
* @入口参数	addr:擦除起始地址
* @返回值	无
*/
void DRI_Flash_Erase_32KByte(uint32_t addr)
{
	Flash_WriteEnable();												/* 先进行写使能 */

	BSP_Flash_CS_RESET();														/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(BLOCK_ERACE_32KB);						/* 发送擦除32KB数据空间命令 */
	BSP_Flash_SendByte((addr & 0xFF0000) >> 16);		/* 发送24位的擦除起始地址 */
	BSP_Flash_SendByte((addr & 0xFF00) >> 8);
	BSP_Flash_SendByte(addr & 0xFF);
	BSP_Flash_CS_SET();															/* 最后拉高CS引脚 */

	Flash_WaitBusy();														/* 等待写操作完成 */
}
#endif/*未使用，裁剪*/
#if 0/*未使用，裁剪*/
/**
* @函数名	DRI_Flash_Erase_64KByte
* @功能	    擦除64KB数据空间
* @入口参数	addr:擦除起始地址
* @返回值	无
*/
void DRI_Flash_Erase_64KByte(uint32_t addr)
{
	Flash_WriteEnable();												/* 先进行写使能 */

	BSP_Flash_CS_RESET();														/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(BLOCK_ERACE_64KB);						/* 发送擦除64KB数据空间命令 */
	BSP_Flash_SendByte((addr & 0xFF0000) >> 16);		/* 发送24位的擦除起始地址 */
	BSP_Flash_SendByte((addr & 0xFF00) >> 8);
	BSP_Flash_SendByte(addr & 0xFF);
	BSP_Flash_CS_SET();															/* 最后拉高CS引脚 */

	Flash_WaitBusy();														/* 等待写操作完成 */
}
#endif/*未使用，裁剪*/
#if 0/*未使用，裁剪*/
/**
* @函数名	DRI_Flash_Erase_Chip
* @功能	    擦除整片数据空间
* @入口参数	无
* @返回值	无
*/
void DRI_Flash_Erase_Chip(void)
{
	Flash_WriteEnable();												/* 先进行写使能 */

	BSP_Flash_CS_RESET();														/* 首先拉低CS引脚 */
	BSP_Flash_SendByte(CHIP_ERACE);									/* 发送整片擦除指令 */
	BSP_Flash_CS_SET();															/* 最后拉高CS引脚 */

	Flash_WaitBusy();														/* 等待写操作完成 */
}
#endif/*未使用，裁剪*/
